package 初始线程;
//终止线程
//通过设置一个变量，手动控制
public class Demo_7 {
    //必须写外面，如果写在主线程里面，会发生报错，lambda只能接受不能被修改的值
    static boolean flt = false;
    //成员变量可以，变成了内部类访问外部类成员

    public static void main1(String[] args) {
        Thread t = new Thread(()->{
            while(!flt){
                System.out.println("这是一个正在运行的线程……");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
            System.out.println("线程运行结束……");
        });
        t.start();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
//        主线程进行干扰
        flt = true;
        System.out.println("让线程结束……");
//        交换代码位置,可能会导致顺序错误
//        交换之后，可能会导致再次打印这是一个正在运行的线程

    }

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(()->{
            while (!Thread.currentThread().isInterrupted()) {//默认为false
                System.out.println("这是一个正在运行的线程……");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);//报错并停止运行，后面代码不会执行
//                    e.printStackTrace();//显示错误原因
                    break;//跳出循环，继续向下执行
                }
            }
            System.out.println("线程执行完毕");
        });

        thread.start();

        Thread.sleep(3000);

        thread.interrupt();
        System.out.println("让进程停下");


    }
}
